home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #2 / Monster Media No. 2 (Monster Media)(1994).ISO / prog_c / tpchal_1.zip / RW.C < prev    next >
C/C++ Source or Header  |  1994-05-26  |  3KB  |  106 lines

  1. /*
  2. **  Rhys Wong (1:203/52, Rhys.Wong@24stex.com)
  3. */
  4.  
  5. #include <stdio.h>
  6.  
  7. void printnum(int *d)
  8. {
  9.     int i;
  10.  
  11.     printf("Number found:  ");
  12.     for (i = 1; i <= 9; i++)
  13.         putchar(d[i]+'0');
  14.     putchar('\n');
  15. }
  16.  
  17. main(void)
  18. {
  19.     int d[10], match, i, sum;
  20. #ifdef TEST
  21.     int I;
  22.  
  23.     for (I = 0; I < 1000; ++I)
  24.     {
  25. #endif
  26.  
  27.     d[5] = 5;       /* The fifth digit has to be 5 */
  28.  
  29.     d[1] = 1;
  30.     do
  31.     {
  32.         if(d[1] == d[5])  continue;
  33.         d[2] = 2;
  34.         do
  35.         {
  36.             if(d[2]==d[5] || d[2]==d[1])  continue;
  37.             d[3] = 3 - (d[1]+d[2]) % 3;
  38.             do
  39.             {
  40.                 if(d[3]==d[5] || d[3]==d[1] || d[3]==d[2])  continue;
  41.                 d[4] = 4 - d[3] % 2 * 2;
  42.                 do
  43.                 {
  44.                     if(d[4]==d[5] || d[4]==d[1] || d[4]==d[2] || d[4]==d[3])
  45.                         continue;
  46.                     d[6] = 3 - (d[1]+d[2]+d[3]+d[4]+d[5]) % 3;
  47.                     do
  48.                     {
  49.                         if(d[6] % 2)  continue;
  50.                         for (i = 1, match = 0; i < 6 && !match; i++)
  51.                         {
  52.                             if (d[6] == d[i])
  53.                                 match = 1;
  54.                         }
  55.                         if (match)
  56.                             continue;
  57.                         d[7] = 7- (((d[5]-d[2])*10+d[6]-d[3])*10+d[1]-d[4]) %7;
  58.  
  59.                         do
  60.                         {
  61.                             for (i = 1, match = 0; i < 7 && !match; i++)
  62.                             {
  63.                                 if (d[7] == d[i])
  64.                                     match = 1;
  65.                             }
  66.                             if (match)
  67.                                 continue;
  68.                             d[8] = 8 - (d[6]*10+d[7]) % 4 * 2;
  69.                             do
  70.                             {
  71.                                 for (i=1, match=sum=0; i < 8 && !match; i++)
  72.                                 {
  73.                                     if(d[8] == d[i])
  74.                                         match = 1;
  75.                                     else
  76.                                         sum += d[i];
  77.                                 }
  78.                                 if (match)
  79.                                     continue;
  80.                                 d[9] = 9 - (sum+d[8]) % 9;
  81.                                 {
  82.                                     for (i=1, match=0; i < 9 && !match; i++)
  83.                                     {
  84.                                         if(d[9] == d[i])
  85.                                             match = 1;
  86.                                     }
  87.                                     if(match)
  88.                                         continue;
  89. #ifdef TEST
  90.                                     if (999 == I)    /* a number is found */
  91. #endif
  92.                                         printnum(d);
  93.                                 }
  94.                             } while((d[8]+=8) <= 9);
  95.                         } while((d[7]+=7) <= 9);
  96.                     } while((d[6]+=3) <= 9);
  97.                 } while((d[4]+=4) <= 9);
  98.             } while((d[3]+=3) <= 9);
  99.         } while((d[2]+=2) <= 9);
  100.     } while(++d[1] <= 9);
  101. #ifdef TEST
  102.     }
  103. #endif
  104.     return 0;
  105. }
  106.